昨天不負責的說了一下我們需要來研究一下如何做權限管理,今天就來研究一下。
const perms = {
command: {
help: new Date("2099-12-31"),
ping: new Date(0),
perm: {
set: new Date(0),
remove: new Date(0),
list: new Date(0),
self: new Date("2099-12-31"),
}
}
};
上面這個就是我們的「基礎權限樹」,我們可以用這個來判斷使用者是否有權限使用某個指令,葉節點的值就是權限的到期時間,如果到期時間是 0 的話代表無權限(一定已過期),如果到期時間是 2099-12-31 的話就相當永久權限(在 Discord 消失之前都不會過期)。
假設我們有兩位使用者,一位是 @admin
,另一位是 @user
,他們的權限樹如下:
const admin_perms = copy(perms);
const user_perms = copy(perms);
admin_perms.command.ping = new Date("2099-12-31");
admin_perms.command.perm = new Date("2099-12-31");
這邊我們直接把 @admin
的 ping 指令權限和 perm 指令權限都設定成永久權限,perm 指令的部分應為設定在母節點上,所有子節點都會直接繼承母節點的權限。而 @user
的權限樹就是我們的基礎權限樹。
權限的部分應該也會對 context 做擴充,我們可以在 context 中加入一個 perm
的欄位,這樣在指令中就可以直接使用 ctx.perm
來取得是否有權限。
ctx.perm("command.help") // true / false
接下來,比較麻煩的我們需要在 TypeScript 中也可以做到權限樹的節點類型安全:
以 2022/10/07 21:00 ~ 2022/10/08 21:00 文章觀看數增加值排名
誤差: 1 小時
+1597
[Day 1] 工具從來不是問題,知識才是力量 ! Scrum 該懂的二三事 !
+522
Day-1 阿里雲服務概論
+521
挑戰 blind75: 以圖解方式練習解題- 前導文
+443
【DAY24】Proxy模式 - 找個代理人來幫忙你吧!
+436
【DAY23】Flyweight模式 - 共享的意義
+423
【DAY25】Memento模式 - 無限生命值的秘訣!
+421
【DAY26】Mediator模式 - 瞭解通訊軟體如何去發送訊息
+421
圖解 blind 75: Array & HashTable - two sum (1/3)
+415
【DAY4】UML (統一建模語言)
+411
【DAY18】Observer模式 - 訂閱你喜好的Youtuber!